움직이는 스프라이트
다음 개념을 사용합니다:
맵 만들기에서 만든 맵의 스프라이트를 움직여보겠습니다. 스프라이트를 움직이기 위해서는 Animate Hook을 사용합니다.
만들어볼 맵은 다음과 같습니다. 아래 맵은 브라우저에서 Stadium을 통해 직접 그려졌습니다.
이전 코드
맵 만들기에서 만든 코드를 가져옵니다.
js
import { Stadium, ImageSprite } from "@rycont/stadium";
const element = document.getElementById("stadium");
const stadium = new Stadium(element, {
width: 800,
height: 600,
});
const src = "https://picsum.photos/200";
const size = { width: 80, height: 80 };
const position = { left: 140, top: 240 };
const image = new ImageSprite({ src, size, position });
stadium.add(image);
Hook 이해하기
Hook은 스프라이트의 기능을 확장합니다. 다음과 같이 사용합니다.
js
import { Animate } from "@rycont/stadium";
const animate = new Animate(); // Hook의 인스턴스를 만듭니다
image.use([animate]); // 스프라이트에 추가합니다
Animate Hook 사용해보기
Animate Hook으로 스프라이트를 부드럽게 움직일 수 있습니다.
js
animate.moveBy(80, 0, 3000); // 3초 동안 오른쪽으로 80, 아래로 0 만큼 이동
animate.moveTo(120, 120, 800); // 0.8초 동안 (120, 120) 위치로 이동
전체 코드
js
import { Stadium, ImageSprite, Animate } from "@rycont/stadium";
const element = document.getElementById("stadium");
const stadium = new Stadium(element, {
width: 800,
height: 600,
});
const src = "https://picsum.photos/200";
const size = { width: 80, height: 80 };
const position = { left: 140, top: 240 };
const image = new ImageSprite({ src, size, position });
const animate = new Animate();
image.use([animate]);
stadium.add(image);
animate.moveBy(80, 0, 3000);
animate.moveTo(120, 120, 2000);
더 나아가기
어떤 Hook에는 PubSub 기능이 있어서, 이벤트를 구독할 수 있습니다. 예를 들어, Animate Hook에서는 다음과 같은 이벤트가 발생합니다.
start
: 애니메이션이 시작될 때end
: 애니메이션이 끝날 때
이벤트를 구독하려면 다음과 같이 합니다.
js
// 애니메이션 시작 이벤트 구독
animate.pubsub.sub("start", (from: Point, to: Point) => {
console.log(from, "에서", to, "로 이동합니다.");
});
// 애니메이션 끝 이벤트 구독
animate.pubsub.sub("end", (from: Point, to: Point) => {
console.log(from, "에서", to, "로 이동했습니다.");
});
Hook에 어떤 이벤트가 있는지 각 문서에 설명되어 있습니다.